package response

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// Response 统一响应结构
type Response struct {
	Code int         `json:"code"`    // 业务码
	Msg  string      `json:"msg"`     // 提示信息
	Data interface{} `json:"data"`    // 数据
}

const (
	SUCCESS = 200
	ERROR   = 400
)

// Success 成功响应
func Success(c *gin.Context, msg string, data interface{}) {
	c.JSON(http.StatusOK, Response{
		Code: SUCCESS,
		Msg:  msg,
		Data: data,
	})
}

// Error 错误响应
func Error(c *gin.Context, msg string) {
	c.JSON(http.StatusBadRequest, Response{
		Code: ERROR,
		Msg:  msg,
		Data: nil,
	})
}

// Page 分页数据
type Page struct {
	List     interface{} `json:"list"`      // 数据列表
	Total    int64       `json:"total"`     // 总数
	Page     int         `json:"page"`      // 当前页码
	Size     int         `json:"size"`      // 每页数量
	HasNext  bool        `json:"has_next"`  // 是否有下一页
	HasPrev  bool        `json:"has_prev"`  // 是否有上一页
}

// SuccessWithPage 分页数据响应
func SuccessWithPage(c *gin.Context, msg string, list interface{}, total int64, page, size int) {
	hasNext := int64((page)*size) < total
	hasPrev := page > 1

	c.JSON(http.StatusOK, Response{
		Code: SUCCESS,
		Msg:  msg,
		Data: Page{
			List:     list,
			Total:    total,
			Page:     page,
			Size:     size,
			HasNext:  hasNext,
			HasPrev:  hasPrev,
		},
	})
} 